package com.map;

import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

/**
 * map集合的遍历
 */
public class MapDemo2 {
    public static void main(String[] args) {
        //Map<String, Integer> map = new HashMap<>();
        //如果希望使用散列表，并且put与遍历顺序一致，可以使用LinkedHashMap
        LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
        map.put("张三", 23);
        map.put("李四", 24);
        map.put("王五", 25);
        map.put("赵六", 26);
        map.put("田七", 27);
        System.out.println("map = " + map);

        // 遍历key,返回的是key的集合，是set类型集合
        Set<String> keys = map.keySet();
        for (String string : keys) {
            System.out.println("key = " + string);
        }
        System.out.println("-------");
        //for Each遍历简写，方法引用写法
        keys.forEach(System.out::println);


        // 遍历Entry,返回的是key-value的集合，是set类型集合
        // 遍历Entry是Map定义的一个接口
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key + ":" + value);
        }

        // 遍历value,返回的是value的集合，是Collection类型集合
        Collection<Integer> values = map.values();
        for (Integer value : values) {
            System.out.println("value = " + value);
        }

        //for Each遍历
        map.forEach((k, v) -> System.out.println(k + ":" + v));


        // 匿名内部类遍历
        map.forEach(new BiConsumer<String, Integer>() {
            @Override
            public void accept(String k, Integer v) {
                System.out.println(k + ":" + v);
            }
        });
    }
}
